'''
print的多态性
__str__
__repr__
'''
class Stock:
  def __init__(self, stockCode) -> None:
    self.stockCode = stockCode
  # def __str__(self) -> str:
  #   print('in__str__')
  #   return 'stock is'+self.stockCode
  def __repr__(self) -> str:
    print('in__repr__')
    return 'stock is'+self.stockCode
  
myStock = Stock('22222')
print(myStock)  # print方法会触发__repr__方法，虽然print接收的是对象，但打印的是字符串。所以这里也是会调用__str__将其转化为字符串

'''
针对每个能“被遍历”的类，可以让__iter__和__next__方法以多态性的方式实现各种遍历功能。
例如：列表对象就有这两个属性
'''
for i in [1,2,3]:
  print(i)

'''
如果想要自定义的类具有“被遍历”的属性，即能被in操作。也需要具有上面两个的方法

自定义 迭代器

'''
class myIter:
  def __init__(self, min, max) -> None:
    self.value = min
    self.min = min
    self.max = max
  def __iter__(self): # 输出全部
    print('__iter__')
    return self
  def __next__(self): # 生成下一个偶数
    print('__next__')
    self.value += 2
    if (self.value > self.max):
      raise StopIteration
    return self.value

myList = myIter(0, 7)
for i in myList:
  print(i)